package cn.ondraw.ragflow.service;

import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.ApiResponse;
import org.springframework.http.ResponseEntity;
import reactor.core.publisher.Flux;

import java.util.List;

public interface ConversationService {
    /**
     * 设置会话
     *
     * @param request 设置会话请求
     * @return 通用响应
     */
    ApiResponse setConversation(SetConversationRequest request);

    /**
     * 获取会话
     *
     * @param conversationId 会话 ID
     * @return 通用响应
     */
    ApiResponse getConversation(String conversationId);

    /**
     * 获取 SSE 会话
     *
     * @param dialogId 对话 ID
     * @param token    授权令牌
     * @return 通用响应
     */
    ApiResponse getSseConversation(String dialogId, String token);

    /**
     * 删除会话
     *
     * @param conversationIds 会话 ID 列表
     * @return 通用响应
     */
    ApiResponse rmConversation(List<String> conversationIds);

    /**
     * 列出会话
     *
     * @param dialogId 对话 ID
     * @return 通用响应
     */
    ApiResponse listConversation(String dialogId);

    /**
     * 获取会话完成结果
     *
     * @param request 完成请求
     * @return 响应实体
     */
    ResponseEntity<Object> completion(CompletionRequest request);

    /**
     * 文本转语音
     *
     * @param request 文本转语音请求
     * @return 响应实体
     */
    ResponseEntity<Object> tts(TtsRequest request);

    /**
     * 删除消息
     *
     * @param request 删除消息请求
     * @return 通用响应
     */
    ApiResponse deleteMsg(DeleteMsgRequest request);

    /**
     * 点赞或踩
     *
     * @param request 点赞或踩请求
     * @return 通用响应
     */
    ApiResponse thumbup(ThumbupRequest request);

    /**
     * 提问
     *
     * @param request 提问请求
     * @return 响应实体
     */
    ResponseEntity<Flux<String>> ask(AskRequest request);

    /**
     * 生成思维导图
     *
     * @param request 思维导图请求
     * @return 通用响应
     */
    ApiResponse mindmap(MindmapRequest request);

    /**
     * 获取相关问题
     *
     * @param request 相关问题请求
     * @return 通用响应
     */
    ApiResponse relatedQuestions(RelatedQuestionsRequest request);
}
